import java.rmi.Naming;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.Scanner;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import service.CentralOperacoesRemote;

public class Aplicacao {

	final int SAIR = -1;

	//   A APLICAï¿½ï¿½O TEM 3 REFERENCIAS PARA USO, ELA BUSCA OS OBJETOS NA CENTRAL
	private CentralOperacoesRemote central;
	// ID que identifica a locadora que esta sendo (visitada)
	private int locadoraAtual;
	private String entrada;
	private int escolha = 0;
	private Scanner in = new Scanner(System.in);



        // Menu para escolher qual locadora estÃ¡ sendo visitada
	public void menuEntradaLocadora(){
		while(escolha!=SAIR){
			System.out.println("Digite o Id da Locadora a ser visitada ou -1 para voltar");
			entrada = in.nextLine();
			try{
				escolha = Integer.parseInt(entrada);
				if(escolha==-1)
				{//variavel de controle volta a ser para nï¿½o atrapalhar menu anterior
					escolha=0;
					return;
				}
				locadoraAtual = escolha;

				//TODO
				//testa pra ver se a locadora existe
				/*if(!this.central.existeFilial(locadoraAtual)){
					System.out.println("Locadora com id digitado nao existe");
					System.out.println();
					continue;
				}*/
				// vai para menu da locadora
				menuLocadora();



			}
			catch(Exception e){
				System.out.println(e.getMessage());
				System.out.println("ID digitado ï¿½ invï¿½lido.");
				System.out.println();
				continue;
			}
		}
	}




	public void menuInicial(){

		while(escolha!=SAIR){

			System.out.println("Digite o numero do escolhido e tecle Enter:");
			System.out.println("1 - Listar Locadoras");
			System.out.println("2 - Entrar numa Locadora");
			System.out.println("3 - Finalizar e Sair");

			entrada = in.nextLine();
			try{
				escolha = Integer.parseInt(entrada);
			}
			catch(Exception e){
				System.out.println("Numero Digitado ï¿½ invï¿½lido. Por favor Digite novamente");
				System.out.println();
				continue;
			}

			switch(escolha){
			case 1:
                                //System.out.println(this.central.listaLocadoras());
				continue;

			case 2:
                            menuEntradaLocadora();
                            continue;

			case 3:
                            System.out.println("Se desligando do Sistema. Adeus");
                            escolha=-1;
			}

		}



	}



	public void menuLocadora(){

		while(true){
			//cria o menu da locadora, indicando  locadora atual
			System.out.println("Bem Vindo. Vocï¿½ estï¿½ na Locadora: " + locadoraAtual);
			System.out.println("Digite o numero do escolhido e tecle Enter:(-1 para sair)");
			System.out.println("1 - Cadastrar Cliente");
			System.out.println("2 - Fazer Locaï¿½ï¿½o");
			System.out.println("3 - Verificar Divida");
			System.out.println("4 - Pagar Divida");
			System.out.println("5 - Listar Clientes");


			entrada = in.nextLine();
			try{
				escolha = Integer.parseInt(entrada);
			}
			catch(Exception e){
				//System.out.println(e.getMessage());
				System.out.println("Numero Digitado ï¿½ invï¿½lido. Por favor Digite novamente");
				System.out.println();
				continue;
			}


			switch(escolha){
			case 1: cadastrarCliente();
				break;

			case 2:
				locarCarro();
				break;
			case 3:
				verificarDivida();
				break;

			case 4:
				pagarDivida();
				break;

			case 5:
				listarClientes();
				break;
			case -1://para nï¿½o sair de todos os laï¿½os while;
					escolha=0;
					return;

			}


		}

		}

	public void listarClientes(){
		//sï¿½ para manter o switch mais limpo
		//	System.out.println(this.central.listarClientes());
		
	}


	public void pagarDivida(){
		int idLoc;
		String cliente;
		System.out.println("Digite o ID da Locadora onde deseja pagar a divida:");
		entrada = in.nextLine();
		try {
			idLoc = Integer.parseInt(entrada);
			System.out.println("Digite o id do usuario (CPF)");
			cliente = in.nextLine();


			//TENTA PAGAR A DIVIDA, RECEBE UM STRING DE CONFIRMAï¿½ï¿½O/FALHA
			//VOLTA AO MENU ANTERIOR SE ERRO DE ENTRADA
			//System.out.println(this.central.pagarDivida(cliente,idLoc));
            }
		 catch(NumberFormatException n){
				System.out.println("Entrada Incorreta");
				System.out.println("Voltando ao menu");
				System.out.println();
				return;
		 }
	}

	public void verificarDivida(){
			String cliente;
			System.out.println("Digite o id do usuario (CPF) para verificar dividas");
			cliente = in.nextLine();


			//System.out.println(this.central.verficaDivida(cliente));
		 

	}

	public void locarCarro(){
		String carro ;
		String cliente;

		try {
				System.out.println("Digite o id do usuario (CPF)");
				cliente = in.nextLine();
				System.out.println("Escolha seu carro pelo numero da lista");

				//listar carros relativos aquela locadora
                                   //System.out.println(this.central.listarCarros(locadoraAtual));

				System.out.println("Placa do Carro: ");
				carro = in.nextLine();
				//System.out.println(this.central.locarCarro(cliente, locadoraAtual, carro));
				System.out.println();

			 }

			catch(NumberFormatException n){
				System.out.println("Entrada Incorreta");
				System.out.println("Voltando ao menu");
				System.out.println();
				return;
		}

	}


	public void cadastrarCliente(){
		String cpf=null;
		String nome=null;

		 System.out.println("Digite o cpf:");
		 cpf = in.nextLine();
		 cpf = cpf.trim();
		 System.out.println("Digite o Nome:");
		 nome = in.nextLine();
		 nome = nome.trim();

			 //System.out.println(this.central.cadastrarCliente(cpf, nome));
			 System.out.println();
	}


	public void setCentral(CentralOperacoesRemote c){
		this.central = c;
	}

	public static void main(String[] args){
		Aplicacao aplic = new Aplicacao();
		try {
                        Context ctx = new InitialContext();
                        CentralOperacoesRemote central = (CentralOperacoesRemote) ctx.lookup( "rmi://localhost/Central");
			aplic.setCentral(central);
		} catch (NamingException ex) {
            Logger.getLogger(Aplicacao.class.getName()).log(Level.SEVERE, null, ex);
        }
		

		aplic.menuInicial();
	}


}
